package com.person.jiaiplan.exception;


import com.person.jiaiplan.pojo.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


/**
 * desc：
 * 全局错误处理
 *
 * @author wend
 */
@Slf4j
@ControllerAdvice
public class ExceptionHandle {


    /**
     * 判断错误是否是已定义的已知错误，不是则由未知错误代替，同时记录在log中
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public R handleException(Exception e) {
        log.error(" error message:" + e.getMessage());
        // todo 生产需要去掉这个输出
        e.printStackTrace();

        if (e instanceof NullPointerException) {
            return R.failed(e.getMessage());
        }
        if (e instanceof MethodArgumentNotValidException) {
            return R.failed(e.getMessage());
        }
        if (e instanceof NoSuchBeanDefinitionException) {
            return R.failed("未配置服务Bean对象，请检查配置信息");
        }
        // todo other exception
        // 未知错误
        return R.failed(e.getMessage());
    }
}
